package com.bosssoft.hr.train.j2se.collection;

import com.bosssoft.hr.train.j2se.pojo.User;
import lombok.extern.slf4j.Slf4j;

import java.util.Collections;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;

/**
 * @Class TreeSetDemo
 * @Description 使用 TreeSet 存储10规格 User，要求输出User的时候可以按工号排序。
 * @Author TangZaoBang
 * @Date 2023/04/26 20:20
 * @Version
 */
@Slf4j
public class TreeSetDemo extends BaseCollectionDemo{
    /**
     * 注入比较器TreeSet（Comparator　comp）－构造了一个空的树的集合，
     * 它按照由comp指定的比较函数进行排序。
     */
    private Set<User> userTreeSet=new TreeSet<>(new Comparator<User>() {
        /**
         * compare方法比较两个 User 对象的 code 字段，
         * 并返回一个整数值，用于表示两个对象的大小关系。0 代表相等  负数说明o1小于o2
         * @author TangZaoBang
         * @date 2023/04/26 20:54
         * @param o1 
         * @param o2 
         * @return int 
         */
        @Override
        public int compare(User o1, User o2) {
            return o1.getCode().compareTo(o2.getCode());
        }
    });

   /**
    * 使用userTreeSet对User[]按照code排序
    * @author TangZaoBang
    * @date 2023/04/26 20:58
    * @param array
    * @return com.bosssoft.hr.train.j2se.pojo.User[]
    */
    private User[] sort(User[] array) {

        if(null!=array && array.length>0){
            //添加时set中的比较器会自动比较
            Collections.addAll(userTreeSet,array);
            User[] users= userTreeSet.toArray(new User[userTreeSet.size()]);
            log.info(Constraint.LOG_TAG+"{}","排序成功");
            return users;
        }else {
            return array;
        }
    }

  /**
   * 排序User[] users 并进行遍历
   * @author TangZaoBang
   * @date 2023/04/26 20:59
   * @return void
   */
    public void showSortResult(){
        // 父类方法构建数据
        User[] users=generateData();
        //排序
        sort(users);
        // 输出
        for(User user :users){
            log.info(Constraint.LOG_TAG+"当前User:"+user);
        }
    }
}
